package com.fmm.easy;

public class CircularLinkedList {

    /**
     * @param head 单向链表头节点
     * @return 是否有环
     * */
    public static boolean hasCycle(Node head) {
        // 慢指针
        Node slow = head;
        // 快指针
        Node fast = head;
        // 如果没有环，块指针会先达到 null，如果快指针没有达到 null 并且快指针的下一个节点也不为 null，更新快慢指针
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            // 如果有环，快慢指针必然会相遇
            if (slow == fast) {
                return true;
            }
        }
        return false;
    }

    private record Node(int val, Node next) {
    }

}
